/*this is basic form validation using for validation person's basic information author:Clara Guo data:2017/07/20*/
$(document).ready(function(){
	// $.validator.setDefaults({
	// 	  submitHandler: function(form) {
	// 	 		form.submit();
	// 	}
	// });
    var icon = "<i class='fa fa-times-circle'></i>";

    // 8-15位的数字加字母加特殊字符（_!@#$%^&*）的组合密码
    jQuery.validator.addMethod("checkPassword",function(value,element){
        var name=/^(?![a-zA-Z]+$)(?![A-Z0-9]+$)(?![A-Z\\W_!@#$%^&*`~()-+=]+$)(?![a-z0-9]+$)(?![a-z\\W_!@#$%^&*`~()-+=]+$)(?![0-9\\W_!@#$%^&*`~()-+=]+$)[a-zA-Z0-9\\W_!@#$%^&*`~()-+=]{8,15}$/;
        return this.optional(element) || (name.test(value));
    },icon+"密码要同时含有数字、字母和特殊字符，且长度要在8-15位之间");

    // 8-15位的数字加字母组合密码
    jQuery.validator.addMethod("checkPassword1",function(value,element){
        var name=/^(?![^a-zA-Z]+$)(?!\D+$)/;
        return this.optional(element) || (name.test(value));
    },icon+"密码要同时含有数字和字母，且长度要在8-15位之间");

    // 验证正整数
    jQuery.validator.addMethod("positiveInteger",function(value,element){
        var name=/^\+?(0|[1-9][0-9]*)$/;
        return this.optional(element) || (name.test(value));
    },icon+"请输入正整数");

    // 由26个英文字母或者下划线组成的字符串
    jQuery.validator.addMethod("dataTable",function(value,element){
        var name=/^[a-zA-Z_]{1,}$/;
        return this.optional(element) || (name.test(value));
    },icon+"请输入正确的格式");

    //手机号码和电话号码验证
    jQuery.validator.addMethod("phoneAndMobile",function(value,element){
        var length = value.length;
        var phone=/^1[3|4|5|6|7|8|9][0-9]\d{8}$/;
        var tel = /^(0\d{2,3}-)?\d{7,8}$/g;//区号3,4位,号码7,8位
        return this.optional(element)||(length == 11 && phone.test(value) || tel.test(value));
    },"请填写正确的11位手机号或电话号码");

    //手机号码验证身份证正则合并：(^\d{15}$)|(^\d{17}([0-9]|X)$)
	jQuery.validator.addMethod("isPhone",function(value,element){
		var length = value.length;
		var phone=/^1[3|4|5|6|7|8|9][0-9]\d{8}$/;
		return this.optional(element)||(length == 11 && phone.test(value));
	},"请填写正确的11位手机号");
	//电话号码验证
	jQuery.validator.addMethod("isTel",function(value,element){
		var tel = /^(0\d{2,3}-)?\d{7,8}$/g;//区号3,4位,号码7,8位
		return this.optional(element) || (tel.test(value));
	},"请填写正确的座机号码");
	//姓名校验
	jQuery.validator.addMethod("isName",function(value,element){
		var name=/^[\u4e00-\u9fa5]{2,6}$/;
		return this.optional(element) || (name.test(value));
	},"姓名只能用汉字,长度2-4位");
	//校验用户名
	jQuery.validator.addMethod("isUserName",function(value,element){
		var userName=/^[a-zA-Z0-9]{2,13}$/;
		return this.optional(element) || (userName).test(value);
	},'请输入数字或者字母,不包含特殊字符');
	
	//校验身份证请输入正确的15或18位身份证号,末尾为大写X
	jQuery.validator.addMethod("isIdentity",function(value,element){
		var id= /^(\d{15}$|^\d{18}$|^\d{17}(\d|X))$/;
		return this.optional(element) || (id.test(value));
	},"请输入正确的身份证号码");

	//校验出生日期
	jQuery.validator.addMethod("isBirth",function(value,element){
		var birth = /^(19|20)\d{2}-(1[0-2]|0?[1-9])-(0?[1-9]|[1-2][0-9]|3[0-1])$/;
		return this.optional(element) || (birth).test(value);
	},"出生日期格式示例2000-01-01");
	//校验新旧密码是否相同
	jQuery.validator.addMethod("isdiff",function(){
		var p1=$("#pwdOld").val();
		var p2=$("#pwdNew").val();
		if(p1==p2){
			return false;
		}else{
			 return true;
		}
		});
	//校验新密码和确认密码是否相同
	jQuery.validator.addMethod("issame",function(){
		var p3=$("#confirm_password").val();
		var p4=$("#pwdNew").val();
		if(p3==p4){
			return true;
		}else{
			 return false;
		}
		});
	//校验基础信息表单
	$("#basicInfoForm").validate({
		errorElement:'span',
		errorClass:'help-block error-mes',
		rules:{
			name:{
				required:true,
				isName:true
			},
			sex:"required",
			birth:"required",
            mobile:{
				required:true,
				isPhone:true
			},
			email:{
				required:true,
				email:true
			}
		},
		messages:{
			name:{
				required:"请输入中文姓名",
				isName:"姓名只能为汉字"
			},
			sex:{
				required:"请输入性别"
			},
			birth:{
				required:"请输入出生年月"
			},
            mobile:{
				required:"请输入手机号",
				isPhone:"请填写正确的11位手机号"
			},
			email:{
				required:"请输入邮箱",
				email:"请填写正确的邮箱格式"
			}
		},
	
		errorPlacement:function(error,element){
			element.next().remove();
			element.closest('.gg-formGroup').append(error);
		},
		
		highlight:function(element){
			$(element).closest('.gg-formGroup').addClass('has-error has-feedback');
		},
		success:function(label){
			var el = label.closest('.gg-formGroup').find("input");
			el.next().remove();
			label.closest('.gg-formGroup').removeClass('has-error').addClass("has-feedback has-success");
			label.remove();
		},
		submitHandler:function(form){
			alert("保存成功!");
		}
	});
	
	//校验修改密码表单
	$("#modifyPwd").validate({
		onfocusout: function(element) { $(element).valid()},
		 debug:false, //表示校验通过后是否直接提交表单
		 onkeyup:false, //表示按键松开时候监听验证
		rules:{
			pwdOld:{
				required:true,
				minlength:6
			},
            pwdNew:{
			   required:true,
			   minlength:6,
			   isdiff:true,
			   //issame:true,
		   },
			confirm_password:{
			  required:true,
			  minlength:6,
			  issame:true,
			}
		  
		   },
		messages:{
			 	pwdOld : {
					 required:'必填',
					 minlength:$.validator.format('密码长度要大于6')
				},
            	pwdNew:{
				   required:'必填',
				   minlength:$.validator.format('密码长度要大于6'),
				   isdiff:'原密码与新密码不能重复',
				  
			   },
				confirm_password:{
				   required:'必填',
				   minlength:$.validator.format('密码长度要大于6'),
				   issame:'新密码要与确认新密码一致',
				}
		
		},
		errorElement:"mes",
		errorClass:"gg-star",
		errorPlacement: function(error, element) 
		{ 
			element.closest('.gg-formGroup').append(error);

		}
	});
});


function cardId(){
  var idCardNoUtil = {
    provinceAndCitys: {
      11: "北京", 12: "天津", 13: "河北", 14: "山西", 15: "内蒙古", 21: "辽宁", 22: "吉林", 23: "黑龙江",
      31: "上海", 32: "江苏", 33: "浙江", 34: "安徽", 35: "福建", 36: "江西", 37: "山东", 41: "河南", 42: "湖北", 43: "湖南", 44: "广东",
      45: "广西", 46: "海南", 50: "重庆", 51: "四川", 52: "贵州", 53: "云南", 54: "西藏", 61: "陕西", 62: "甘肃", 63: "青海", 64: "宁夏",
      65: "新疆", 71: "台湾", 81: "香港", 82: "澳门", 91: "国外"
    },

    powers: ["7", "9", "10", "5", "8", "4", "2", "1", "6", "3", "7", "9", "10", "5", "8", "4", "2"],

    parityBit: ["1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"],

    genders: { male: "男", female: "女" },

    checkAddressCode: function (addressCode) {
      var check = /^[1-9]\d{5}$/.test(addressCode);
      if (!check) return false;
      if (idCardNoUtil.provinceAndCitys[parseInt(addressCode.substring(0, 2))]) {
        return true;
      } else {
        return false;
      }
    },

    checkBirthDayCode: function (birDayCode) {
      var check = /^[1-9]\d{3}((0[1-9])|(1[0-2]))((0[1-9])|([1-2][0-9])|(3[0-1]))$/.test(birDayCode);
      if (!check) return false;
      var yyyy = parseInt(birDayCode.substring(0, 4), 10);
      var mm = parseInt(birDayCode.substring(4, 6), 10);
      var dd = parseInt(birDayCode.substring(6), 10);
      var xdata = new Date(yyyy, mm - 1, dd);
      if (xdata > new Date()) {
        return false;//生日不能大于当前日期
      } else if ((xdata.getFullYear() == yyyy) && (xdata.getMonth() == mm - 1) && (xdata.getDate() == dd)) {
        return true;
      } else {
        return false;
      }
    },

    getParityBit: function (idCardNo) {
      var id17 = idCardNo.substring(0, 17);
      var power = 0;
      for (var i = 0; i < 17; i++) {
        power += parseInt(id17.charAt(i), 10) * parseInt(idCardNoUtil.powers[i]);
      }
      var mod = power % 11;
      return idCardNoUtil.parityBit[mod];
    },

    checkParityBit: function (idCardNo) {
      var parityBit = idCardNo.charAt(17).toUpperCase();
      if (idCardNoUtil.getParityBit(idCardNo) == parityBit) {
        return true;
      } else {
        return false;
      }
    },

    checkIdCardNo: function (idCardNo) {
      //15位和18位身份证号码的基本校验
      var check = /^\d{15}|(\d{17}(\d|x|X))$/.test(idCardNo);
      if (!check) return false;

      //判断长度为15位或18位
      if (idCardNo.length == 15) {
        return idCardNoUtil.check15IdCardNo(idCardNo);
      } else if (idCardNo.length == 18) {
        return idCardNoUtil.check18IdCardNo(idCardNo);
      } else {
        return false;
      }
    },

    //校验15位的身份证号码
    check15IdCardNo: function (idCardNo) {
      //15位身份证号码的基本校验
      var check = /^[1-9]\d{7}((0[1-9])|(1[0-2]))((0[1-9])|([1-2][0-9])|(3[0-1]))\d{3}$/.test(idCardNo);
      if (!check) return false;
      //校验地址码
      var addressCode = idCardNo.substring(0, 6);
      check = idCardNoUtil.checkAddressCode(addressCode);
      if (!check) return false;
      var birDayCode = '19' + idCardNo.substring(6, 12);
      //校验日期码
      return idCardNoUtil.checkBirthDayCode(birDayCode);
    },

    //校验18位的身份证号码
    check18IdCardNo: function (idCardNo) {
      //18位身份证号码的基本格式校验
      var check = /^[1-9]\d{5}[1-9]\d{3}((0[1-9])|(1[0-2]))((0[1-9])|([1-2][0-9])|(3[0-1]))\d{3}(\d|x|X)$/.test(idCardNo);
      if (!check) return false;

      //校验地址码
      var addressCode = idCardNo.substring(0, 6);
      check = idCardNoUtil.checkAddressCode(addressCode);
      if (!check) return false;

      //校验日期码
      var birDayCode = idCardNo.substring(6, 14);
      check = idCardNoUtil.checkBirthDayCode(birDayCode);
      if (!check) return false;

      //验证校检码
      return idCardNoUtil.checkParityBit(idCardNo);
    },
    formateDateCN: function (day) {
      var yyyy = day.substring(0, 4);
      var mm = day.substring(4, 6);
      var dd = day.substring(6);
      return yyyy + '-' + mm + '-' + dd;
    },
    //获取信息
    getIdCardInfo: function (idCardNo) {
      var idCardInfo = {
        gender: "", //性别
        birthday: "" // 出生日期(yyyy-mm-dd)
      };
      if (idCardNo.length == 15) {
        var aday = '19' + idCardNo.substring(6, 12);

        idCardInfo.birthday = idCardNoUtil.formateDateCN(aday);

        if (parseInt(idCardNo.charAt(14)) % 2 == 0) {
          idCardInfo.gender = idCardNoUtil.genders.female;
        } else {
          idCardInfo.gender = idCardNoUtil.genders.male;
        }
      } else if (idCardNo.length == 18) {
        var aday = idCardNo.substring(6, 14);

        idCardInfo.birthday = idCardNoUtil.formateDateCN(aday);

        if (parseInt(idCardNo.charAt(16)) % 2 == 0) {
          idCardInfo.gender = idCardNoUtil.genders.female;
        } else {
          idCardInfo.gender = idCardNoUtil.genders.male;
        }
      }
      return idCardInfo;
    },

    getId15: function (idCardNo) {
      if (idCardNo.length == 15) {
        return idCardNo;
      } else if (idCardNo.length == 18) {
        return idCardNo.substring(0, 6) + idCardNo.substring(8, 17);
      } else {
        return null;
      }
    },

    getId18: function (idCardNo) {
      if (idCardNo.length == 15) {
        var id17 = idCardNo.substring(0, 6) + '19' + idCardNo.substring(6);
        var parityBit = idCardNoUtil.getParityBit(id17);
        return id17 + parityBit;
      } else if (idCardNo.length == 18) {
        return idCardNo;
      } else {
        return null;
      }
    }
  };
  return idCardNoUtil;
}